package controllers.rutas;

import java.util.Date;
import java.util.List;

import models.rutas.Comentario;
import models.rutas.Ruta;
import models.rutas.Tramo;
import models.usuarios.Usuario;
import play.Logger;
import play.mvc.Controller;

public class RutasApiController extends Controller {

	public static void addTracks(String datos) {

		Logger.error("---> Inicia adTracks para " + datos);

		String[] partesDatos = datos.split(";");

		Usuario usuario = (Usuario) Usuario.find("byUsername", partesDatos[0]).fetch().get(0);
		// TODO: Verificar que la ruta pertenece al usuairo.

		Ruta ruta = null;
		Tramo tramo = null;

		if (partesDatos[1].equals("-1")){
			ruta = new Ruta(usuario, partesDatos[2]);

			// Si no guardo, cuando intente guardar el tramo me dará error
			ruta.save();
		} else {
			ruta = Ruta.findById(Long.valueOf(partesDatos[1]));
		}

		if (partesDatos[3].equals("-1")){
			tramo = new Tramo(ruta, Long.valueOf(partesDatos[4]));
			ruta.tramos.add(tramo);
		} else {
			tramo = Tramo.findById(Long.valueOf(partesDatos[3]));
		}

		if (!"".equals(partesDatos[5])){
			Date fechaFin = new Date(Long.valueOf(partesDatos[5]));
			tramo.fechaFin = fechaFin;
		}

		int numDatos = partesDatos.length;
		System.out.println("Nº de datos: " + numDatos);

		String comaLatitud = "";
		String comaLongitud = "";

		if (!"".equals(tramo.latitud)){
			comaLatitud = ";";
		}
		if (!"".equals(tramo.longitud)){
			comaLongitud = ";";
		}
		
		float distancia = Float.valueOf(partesDatos[6]);
		tramo.distancia = tramo.distancia + distancia;

		int contador = 0;
		for (int i=7; i < numDatos; i+=2){

			System.out.println("Coordenada: " + partesDatos[i] + ", " + partesDatos[i+1]);
			tramo.longitud += comaLongitud + partesDatos[i];
			tramo.latitud += comaLatitud + partesDatos[i+1];

			comaLatitud = ";";
			comaLongitud = ";";

			contador++;
			if (contador > 5) {
				break;
			}
		}

		tramo.save();
		ruta.save();

		Logger.error("---> Finaliza adTracks para " + datos);
        renderJSON(ruta.id + ";" + tramo.id);
    }

	public static void addComentario(String datos) {

		String[] partesDatos = datos.split(";");

		Ruta ruta = Ruta.findById(Long.valueOf(partesDatos[0]));
		Comentario comentario = new Comentario(partesDatos[1], partesDatos[2], partesDatos[3], partesDatos[4]);
		comentario.save();
		ruta.comentario.add(comentario);
		ruta.save();
		renderJSON("OK");
	}

	public static void listRutas(String datos){

		System.out.println(datos);
		List<Ruta> rutasByUsuario = Ruta.find("select r from Ruta r inner join r.autores a where a.username = ?", datos).fetch();
		String resultado = "";
		for (Ruta iter : rutasByUsuario){
			resultado += ";" + iter.getId() + "," + iter.nombre;
		}

		if (resultado.length() > 0){
			resultado = resultado.substring(1);
		}

		renderJSON(resultado);
	}

	public static void listAmigos(String datos){

		Usuario usuario = (Usuario) Usuario.find("byUsername", datos.trim()).fetch().get(0);
		String resultado = "";
		for (Usuario iter : usuario.amigos){
			resultado += ";" + iter.getId() + "," + iter.username;
		}

		if (resultado.length() > 0){
			resultado = resultado.substring(1);
		}

		renderJSON(resultado);
	}

	public static void addAmigoToRuta(String datos){

		String[] partesDatos = datos.split(";");
		Usuario usuario = (Usuario) Usuario.findById(Long.valueOf(partesDatos[0]));
		Ruta ruta = Ruta.findById(Long.valueOf(partesDatos[1]));

		System.out.println("Ruta: " + ruta);

		if (!ruta.autores.contains(usuario)){
			ruta.autores.add(usuario);
			ruta.save();
		}

		renderJSON("OK");
	}

	public static void addAmigo(String datos){

		String[] partesDatos = datos.split(";");
		Usuario usuario = (Usuario) Usuario.find("byUsername", partesDatos[0]).fetch().get(0);
		Usuario amigo = (Usuario) Usuario.find("byUsername", partesDatos[1]).fetch().get(0);
		if (!usuario.amigos.contains(amigo)){
			usuario.amigos.add(amigo);
			usuario.save();
		}

		renderJSON("OK");
	}
}
